Why is the number of data reduced?

199 views
Skip to first unread message

박상현

unread,
Oct 30, 2019, 3:56:31 AM10/30/19
to mitappinv...@googlegroups.com
Hi, i made app that measures five materials.

when i click '측정' button in screen 2, five materials are measured in turn.

but it have 2 problem.

1. The measurement point is taken 0.5 pts/sec until 30 seconds. however, after 30 seconds it changes 0.1 pts/sec.

2. 0.1 pts/sec is maintained until 5 minutes. after 5 minutes application become jammed.

How can i solve this 2 problem?

Please help me. i don't have enough time.

(application is connected with Atmega328p by bluetooth low energy. And i want to attach my app inventor aia file, but it can't upload in google groups. So if you want i will email you.)
bluetooth connect.png
bluetooth information.png
recieve string from atmega.png
click button timer.png
ui22_copy_resis.aia
sweatsensor.zip

ABG

unread,
Oct 30, 2019, 11:01:19 AM10/30/19
to MIT App Inventor Forum
You can go back and attach an .aia file to an old post.

While you are there, please also post your .ino source code for us,
so we can see the entire picture.

ABG

ABG

unread,
Oct 30, 2019, 11:20:08 AM10/30/19
to MIT App Inventor Forum
Also, you can get a picture of a long blocks event by right clicking it and selecting Download block as .png  on that  block.

This will let us see the bottom of that receive string from atmega block.


Regarding your slowdown issue, I notice you are registering for strings in a Timer event.
I assume from that you are registering multiple times, which is a cause of slowdowns and crashes.
Normal practice is to register only once per data stream.

Those 2 LactateX Timer enables look suspicious.
Show us them too?

ABG

Message has been deleted

박상현

unread,
Oct 31, 2019, 12:33:59 AM10/31/19
to mitappinv...@googlegroups.com
I uploaded full block of string from atmega, lactate timer.

And also i attached block for drawing graph.

But I can't still upload aia file. My aia file has ble extension, so I think google group can not apply extension file. 

Please give me your e-mail address, then i will send aia file and avr source code file. (I use avr program for writting atmega code)

One more thing is error on png file. Those errors just come from changing laugage (Korean -> English), so that's not the cause of the problem. 

I need your help.
string from atmega.png
lactate graph origin timer.png
lactate timer.png
lactate graph.png

Chris Ward

unread,
Oct 31, 2019, 7:53:39 AM10/31/19
to mitappinv...@googlegroups.com
Hi 박상현

You can upload your Project (.aia) by editing your existing Forum Post.

Edit Existing Forum Post.png


Edit: In future, when posting images of Blocks, Please do so with English Language selected. I'm not sure but if you use Google Chrome it might auto-translate your component names, that would help a lot :)

Also, attach your Script for the Atmega328p

Chris Ward

unread,
Oct 31, 2019, 8:05:58 AM10/31/19
to MIT App Inventor Forum
Hi again

Is your Atmega on an Arduino board?

박상현

unread,
Oct 31, 2019, 8:16:51 PM10/31/19
to MIT App Inventor Forum
I uploaded aia file and atmel studio file. (zip file is atmel studio file.)

I used just Atmega328 without Arduino board.

please check it.

ABG

unread,
Oct 31, 2019, 9:45:29 PM10/31/19
to MIT App Inventor Forum
Your screen switching will exhaust the AI2 device memory,
because you don't close a screen for every time you open a screen.
They pile up.

ABG

Screen3 to Screen1.PNG
Screen2 calls Screen1.PNG

박상현

unread,
Nov 1, 2019, 1:34:14 AM11/1/19
to MIT App Inventor Forum
I can understand what you said. 

But there is same error when i didn't create screen1 and screen 3.

So I think block of close screen cannot solve my error.

Can you give another solution?

ABG

unread,
Nov 1, 2019, 1:28:57 PM11/1/19
to MIT App Inventor Forum
Your code is voluminous and fluffy, 
and in an unreadable (for me) language), so
I can only work from a code smell (no offense intended)
and a common BLE misconception seen in other projects.

You copied code a lot, making it harder to correct mistakes that
propagated in your copying, and avoiding
opportunities to generalize the code by switching to a table based design.

Your BLE code in the Timer events shares problematic features with this post ...
by the BLE extension developer.

Check ALL your Timer events for Register blocks, and move them to the corresponding Click event block,
along with the BLE request to start the data stream, if your Arduino code uses start and stop codes to control repeats.

To avoid the possibility that extra unexpected Clocks are running, collect code to disable all of them into a common procedure,
and call it before enabling any procedure.

Study the Any blocks, to allow generalizing your visibility control to lists of Arrangements.

ABG



registering in a Timer 2.PNG
registering in a Timer.PNG
registering in a Timer 4.PNG
registering in a Timer 3.PNG
Screen2.png

박상현

unread,
Nov 1, 2019, 10:37:29 PM11/1/19
to MIT App Inventor Forum
I did according to your advice.

I moved all my resister block on measure block (like png)

I think it worked. But the problem is not solved yet.

Because when I click measure button, app measure 1 pts/sec. However, after 30 second measure point change in 0.2 pts/sec. (Initially it was 0.1 pts/sec)

I also modified all timvers to expire and work again.

please need your help again.


measure click.png
glucose timer.png

ABG

unread,
Nov 2, 2019, 6:50:35 PM11/2/19
to MIT App Inventor Forum
It would help diagnose your problem if you described how your data flow control worked.
There are several possibilities in my mind and you can help me see which it is ...

  1. You send a signal from AI2 to the C program to start sending the data, and the C program loops and transmits until it receives another signal from AI2, using a delay() call to space out its transmissions?
  2. You use a Clock Timer to send a signal from AI2 to the C program to request just 1 reading, then let the AI2 Clock Timer request the next reading, until the AI2 Clock Timer stops requesting readings?
  3. You send a request from AI2 to the C program, and the AI2 Event block that receives the response sends another request for the next reading, like a Ping Pong game?
Also, please unzip your C package and extract the .C++ member, post it here as a convenience for the C specialists.  Their time is limitted.

ABG

ABG

unread,
Nov 2, 2019, 10:19:36 PM11/2/19
to MIT App Inventor Forum
I worked up the courage to start plowing through your C code.

What letter comes between the letters 'h' and 'j'?
See attached Notepad++ screen shot.
It looks like a '1' or maybe an 'l', but not an 'i'.

This sequence of if/then blocks could be made more reliable as an if/then/elseif/elseif ladder.
At least that way, only one branch would execute per pass.

ABG
 
suspicious measure test.PNG

ABG

unread,
Nov 2, 2019, 10:58:09 PM11/2/19
to MIT App Inventor Forum
Another question ...

Why do some of your reading transmission sequences end with 

sprintf(str_data, " %.2f\n ", vpotassium2); send_str(str_data);
_delay_ms(50);
while(!(UCSR0A & 0x80));
trash=UDR0;
while(!(UCSR0A & 0x80));
trash=UDR0;
while(!(UCSR0A & 0x80));
trash=UDR0;
 and others end with

 concentrationk=pow(10.0, concentrationlogk);
sprintf(str_data, " %.2f\n ", concentrationk); send_str(str_data);
while(!(UCSR0A & 0x80));
trash=UDR0;
while(!(UCSR0A & 0x80));
trash=UDR0;
while(!(UCSR0A & 0x80));
trash=UDR0;
 

(without the delay(50)) ?

ABG
 

ABG

unread,
Nov 3, 2019, 2:37:52 PM11/3/19
to MIT App Inventor Forum
Further questions ...

Am I correct in guessing this code sequence 

while(!(UCSR0A & 0x80));
 trash=UDR0;
which appears 3 times after processing each function 
is meant to skip 3 input bytes ?

What are those 3 bytes, and why must you skip them?

ABG

ABG

unread,
Nov 3, 2019, 6:38:02 PM11/3/19
to MIT App Inventor Forum
Regarding the 30 second delay before the slowdown,
here's a hypothesis ...

What is the power supply for the device?

Is it a coin cell, or a heavier duty externally powered unit, like a wall wart?

I ask because driving a circuit hard can overtax small batteries,
lowering their operating voltages, and some CPUs
have been known to slow down when their voltage supplies degrade.

ABG

박상현

unread,
Nov 3, 2019, 11:23:59 PM11/3/19
to mitappinv...@googlegroups.com
  • First question
  1. You send a signal from AI2 to the C program to start sending the data, and the C program loops and transmits until it receives another signal from AI2, using a delay() call to space out its transmissions?
  2. You use a Clock Timer to send a signal from AI2 to the C program to request just 1 reading, then let the AI2 Clock Timer request the next reading, until the AI2 Clock Timer stops requesting readings?
  3. You send a request from AI2 to the C program, and the AI2 Event block that receives the response sends another request for the next reading, like a Ping Pong game
       My answer: 2 is my block in Al2. When I click start button, timer is worked until stop button.

  • Second question
         My answer: Delay 50 was not meaningful. The code was worked within or without delay 50.

  • Third question         
while(!(UCSR0A & 0x80));
 trash=UDR0;
          which appears 3 times after processing each function 
          is meant to skip 3 input bytes ?

          What are those 3 bytes, and why must you skip them?

         My answer: I think those code can eliminate the error of bluetooth connecting. I will try it without code and answer you again.

  • Fourth question
       What is the power supply for the device?

       My answer: Currently, I am using ISP from computer. (model no. is USB-ISP V03.6. This is for code upload but it can also supply power.)
                           But when I don't have any errors with ISP, I will change ISP to 3.7 V lithium battery and 5 V regulator.

  • Fifth question
       What letter comes between the letters 'h' and 'j'?
       
       My answer: Alphabet 'i' doesn't exist. But I think it is not cause. Because when I only use '1' (number one), I have same error.

And I also upload txt file that Atmel Studio code is written.

Atmel Studio code.txt

박상현

unread,
Nov 4, 2019, 2:27:51 AM11/4/19
to MIT App Inventor Forum
I tried about third question. 

I eliminated while and trash code. But error was not solved. 

Can you give me other opinion?

ABG

unread,
Nov 4, 2019, 12:58:07 PM11/4/19
to MIT App Inventor Forum
Does this slowdown happen only for one measurement type?

Are there other measurement types that work without the slowdown?

(Or is the first measurement type that you are testing, so you don't know yet)

(This helps differentiate between a system-wide problem and local code issues.)


ABG

ABG

unread,
Nov 4, 2019, 1:12:06 PM11/4/19
to MIT App Inventor Forum
Here's an easy thing to try, that might eliminate some synchronous waiting in the BLE stack ...

Instead of WriteStringWith Response, use 
WriteString.

Waiting for acknowledgement at the BLE level might be piling up delays, slowing you down.




Another idea to try separately:
Set the UTF-16 parameter false in the WriteStrings call, instead of true.
You don't need to waste time skipping extra bytes in C, considering you only send single ASCII characters.
On the other hand, you might be expecting those extra bytes, in which case don't do this.

ABG

ABG

unread,
Nov 4, 2019, 2:01:29 PM11/4/19
to MIT App Inventor Forum
Here's a design for an alternative command-response scheme, avoiding clocks altogether,
running at full speed, avoiding all timing considerations.

Imagine a new form of Ping Pong, played by one master player simultaneously against 
4 players, named North, East, South, West respectively.  The 4 opponents surround the master player,
one at each compass direction, at their own table (4 tables, arranged in a '+', player at center.)  
This requires a big room.

But there is only one Ping Pong ball.
The master player launches his ball at player North's table
Player North rebounds to the master player.
The master player bounces the ball to player East.
Player East rebounds to the master player.
The master player bounces the ball to player South.
Player South rebounds to the master player.
The master player bounces the ball to player West.
Player West rebounds to the master player.
The master player bounces the ball to player North.
Player North rebounds to the master player.
The master player bounces the ball to player East.
Player East rebounds to the master player.
...

This game gives the master player a bit of a workout,
spinning clockwise while he plays, but there is no worry
about simultaneity or finding multiple balls on their way at once.

For your problem, the opponents would be branches of the Arduino's case statement
testing for mesure values and routing to the appropriate value response, 
and the master player would be AI2 launching mesure codes one at a time at the Arduino
to satisfy your original post, using receipt of a response to trigger launch of the next request.

This design is sometimes called a round robin technique.

This can be programmed in AI2 using a master list of mesure(sic) codes, a sequence schedule list, a mesure code to Label component map, 
a mesure code to filename map, and the Any Label block.

  • The master mesure code list would be a permanent list of the mesure codes you would want to send each round.
  • The sequence schedule list is a temporary list of the mesure codes that remain to be handled in the current round, depleted at item 1, and replenished (via copy list) when empty from the master mesure code list.  Item 1 is the mesure code that has been sent but not yet responded to.  
  • The mesure code to Label component map is a constant 2 column table (list of lists) suitable for the lookup in pairs list block, with mesure codes in column 1 and corresponding Label components in column 2.  It maps mesure codes into the Labels that should receive the anticipated response values from their corresponding mesure codes.
  • The a mesure code to filename map is a constant 2 column table (list of lists) suitable for the lookup in pairs list block, with mesure codes in column 1 and corresponding File components in column 2.  It maps mesure codes into the Files that should receive the anticipated response values from their corresponding mesure codes.  Keeping multiple File components open might be faster than switching on File among multiple filenames.
  • The Any Label block can be used at response receipt time to route the response into the corresponding Label.Text field.  Likewise with an Qny File block, if mapping mesure codes to 
I don't have a code sample for this handy.

ABG





ABG

unread,
Nov 4, 2019, 4:00:56 PM11/4/19
to MIT App Inventor Forum
Attached is a sample app showing a round robin question/response scheduler,
with no Timer events.

I don't have BLE or Arduino hardware, so the device being sampled is the user himself,
as fast as he can answer yes or no to the questions, until he hits Cancel.

The Notifier Choice Event block is acting like a BLE Strings Received event would in your app,
and the Notifier is acting like your BLE WriteStrings block.

I added a List Picker to recap logs of the responses , and a button to reset the log files.

ABG

announce.png
global schedule.png
log.png
nagger.aia
post cancel.PNG
prompt.png
recap eat.PNG
replenishSchedule.png
when File1 GotText.png
when lpkRecap AfterPicking.png
when lpkRecap BeforePicking.png
blocks.png
when Notifier1 AfterChoosing.png
when Screen1 Initialize.png
btnResetLogs.png
Capture.PNG
Clock1.PNG
Designer.PNG
global filenameMap.png
global labels.png
global promptMap.png

박상현

unread,
Nov 5, 2019, 4:09:21 AM11/5/19
to MIT App Inventor Forum
First, I will answer about Does this slowdown happen only for one measurement type?.

My answer is all types are slowdown.

And I tested with WriteString Instead of WriteString. There is no errors using WriteString. But the app doses not measure and the value was only 0(zero). 

Also, Actually, My major is not computer programming, so I can not understand about round robin. And I have no idea how can I apply that in my app.

Please give me more information.

ABG

unread,
Nov 5, 2019, 10:16:06 AM11/5/19
to MIT App Inventor Forum
Can you please post the current error-free .aia file and Arduino code in a new post,
so I can try a fix?

Also, where did you get the Arduino code from?

Also, can you post links to online manufacturer documentation about your hardware?

ABG

박상현

unread,
Nov 6, 2019, 3:40:31 AM11/6/19
to mitappinv...@googlegroups.com
I post error-free aia file. 

And I think the meaning of no error  seems to have been misrepresented.

My purpose was there was no error at app inventor when I write block.

So, Slowdown problem is not also solved at posted aia file. Because Nothing was measured.


About hadware, I post data sheet of Atmega and Bluetooth module.

And here is link



About Bluetooth, I used Korean company, so there was no English page. In the Bluetooth.jpg, I used 11, 12, 18, 19 pin.



I have another question.

In my first post, I mentioned that after 5 min, app was stopped.

Actually, I think I found what was problem.

In my app, I made blank list and when value was measured, write the value in that list. And graph was drawn based on the list.

Problem of app stop was the list. When list has too much value, app was stopped. 

I tested without list. App was not stopped.

But I have to draw graph. So, I think I have to write value outside app like csv or excel file, and load this data.

Would you give me information about loading data and writing that data into list.


Bluetooth.jpg
ATMega328.pdf
ui22_copy_resis_slow_modi_no_graph.aia

Chris Ward

unread,
Nov 6, 2019, 7:37:31 AM11/6/19
to MIT App Inventor Forum
Hi 박상현


When list has too much value, app was stopped.

First thing to ask yourself is - am I processing excess data?  If processing too fast, you will get identical values several times over, which is pointless. Decide what a genuinely reasonable time interval would actually be to suit your requirements - I helped another User a few months back who was processing data every 250 milliseconds and hitting problems with that setup. However, a suitable time interval for the data being collect in that case was 10 minutes!

If you are collecting a large amount of data over a large period of time (and your Android device battery can handle that) then yes, stream the data to a file and later load that file to produce a static graph.

There is an example of streaming to file on my website.


ABG

unread,
Nov 6, 2019, 11:35:12 AM11/6/19
to MIT App Inventor Forum
Regarding file output, pay special attention to the File component's help at
for file placement where they talk about slashes.

Pre-cooked graph examples can be found in the Charts and Graphs section of FAQ

Also see the Files and Lists sections of the FAQ, and the Books and Tutorials section.

There is a free online book in there.

ABG


ABG

unread,
Nov 6, 2019, 12:40:54 PM11/6/19
to MIT App Inventor Forum
I have attached a few suggested changes, using the K (potassium) data flow as an example.
(You can propagate and test the changes as you like.)

My guesses about UTF-16 and WriteStringsWithResponse were wrong, so
put them back, like in the K... Timer block, as you had them.
Better to have slow data than no data.

I also added a value function formatted_now to do the current instant time formatting 
and eliminate the need to route the current time through separate Clocks and Labels on their way into your files.
That same function can replace those different labels for the other data flows,
since you would get the same value for Now() anyway.

Now for a new idea, about how to deal with data that takes time to arrive ...
The returned data from the sensors takes time to arrive.
Don't try to log it to a file immediately after asking for it.
Instead, log it to a file after it arrives.
Notice how I moved the AppendToFile block from the K Clock Timer event block
to the appropriate branch of the IF/then/elseif tree in the When BLE Strings Arrived block.

Let us know if this helps.

ABG

when K Timer.png
formatted_now.png
It is the same time on all Clocks so why duplicate them.PNG
when BLE StringsReceived.png

박상현

unread,
Nov 7, 2019, 6:27:49 AM11/7/19
to MIT App Inventor Forum
I tested using formatted_now block. But problem was not solved. 

I attached my result. (It saved in csv file.)
glucose.csv

Chris Ward

unread,
Nov 7, 2019, 7:51:04 AM11/7/19
to MIT App Inventor Forum
Hi again  박상현

1) Your time intervals are very ambitious. Do you have an infallible reason as to why the time interval should be so short?

2) I think the hardware environment comes into play:

    (a) As the Atmega328p gets hotter, it's performance drops. You need to set up an efficient cooling system.
    (b) The Android Device (Smartphone?) has various power saving technologies - they must all be switched off.
    (c)  Switch off any Anti-Virus software on the Android Device.
    (d)  Provide cooling for the Android Device too; Remove any added protective casing.

ABG

unread,
Nov 7, 2019, 10:03:41 AM11/7/19
to MIT App Inventor Forum
When you post your .aia file, are you trying to change language?

I can't explain why your global variables have broken names.

Maybe this is something I should refer to the MIT person managing language translation?

ABG

ABG

unread,
Nov 7, 2019, 3:26:57 PM11/7/19
to MIT App Inventor Forum
Regarding your broken global variables, ...

Congratulations!

You stumbled across an AI2 bug.

The bug is tracked in this thread ...

ABG

ABG

unread,
Nov 7, 2019, 5:58:08 PM11/7/19
to MIT App Inventor Forum
Regarding your timing question, there is a way to instrument your blocks to
find out where that 5 seconds between readings is being spent.

to note when data is sent out and data arrives, to see where the time difference is, if in the Mega or in AI2.
Call the log('sending BLE character x') before the BLE block that sends character x.
Call the log('enabling timer x') when enabling timer x.
Call the log('received a BLE String') at the top of the BLE StringsReceived event.
You can make a new file log.txt and use an append, like you do for your readings, if you don't want to log to a Label or Textbox.

ABG

박상현

unread,
Nov 8, 2019, 2:17:33 AM11/8/19
to mitappinv...@googlegroups.com
To. Chris Ward

Thank you for your advice.

But Atmega wasn't hot after 30 second and I already use highest perfomance mode.  (I am using Samsung Galaxy 8)

I also quit Anti-Virus software. 

So, I think fever does not cause my problem.

박상현

unread,
Nov 8, 2019, 2:30:41 AM11/8/19
to mitappinv...@googlegroups.com
To. ABG

I revise my block as you said.

When I click start button, Start was written in text box.

When data come from atmega, Rec was written in text box.

And When 5 timer is activated, glucose, lactate, Na, K, Temp are written in text box individually.

Before 30 seconds, (glucose, Rec), (lactate, Rec), (Na, Rec), (K, Rec), (Temp, Rec) was written in about 1 second.

But after 30 seconds, (glucose, Rec) was written in 1 second. And there is gap when app sends letter to atmega.

I attached my blocks and recorded .mp4 file. 
log.png
start.png
glucose.png
Na.png
K.png
Temp.png
Receive.png
mobizen_20191108_152401.mp4

Chris Ward

unread,
Nov 8, 2019, 5:30:53 AM11/8/19
to MIT App Inventor Forum
Hi 박상현

The Atmega would be expected to heat up quickly. If it isn't being cooled, I think cooling it will make a difference in performance, same as with any microcontroller. A well positioned desktop fan might be enough.

I have a Samsung S8 here, it isn't normally pushed to it's limits but if my daughter plays a game on it, it certainly does get noticeably hotter. Hard to say if performance drops but reduced performance is normally related to two things - heat and battery power (and battery power is adversely affected by heat too).

The fact that when your process starts, the data flow is good but later performance falls away, pretty much says "hardware".

ABG

unread,
Nov 8, 2019, 11:28:46 AM11/8/19
to MIT App Inventor Forum
From the log, most of the elapsed time is being spent between
just before each BLE WriteStringWithResponse transmission 
and the arrival of the next message from the ATMega.

Before putting all the blame on the ATMega, here is another experiment to try ...

Add an extra log call immediately after the BLE WriteStringWithResponse transmission block,
like attached.

Since BLE WriteStringWithResponse is synchronous, it might be incurring a delay.

If you want a more precise timestamp in the log, you can use the Clock1.SystemTime block
instead of the format(hh:mm:ss, Now) blocks.  The systemtime is a huge number
(milliseconds from 1970), but it is more precise for sub-seconds measurements.
It is also easier to work with for graph x coordinate math.


If the BLE WriteStringWithResponse block turns out to be the time hog,
try BLE WriteString with the same parameters (UTF-16 true).
The previous test of that block was with UTF-16 false, an unfair test.

ABG


K.png

박상현

unread,
Nov 11, 2019, 2:15:18 AM11/11/19
to mitappinv...@googlegroups.com
I tested adding sending and sent.

There was gap between sent and Rec.

Please check attached files.

And I already tested WriteString with UTF-16 false. 

Result was same like UTF-16 true.
K.png
lactate.png
Na.png
temp.png
glucose.png
mobizen_20191111_160344.mp4

ABG

unread,
Nov 11, 2019, 10:39:19 AM11/11/19
to MIT App Inventor Forum
The increasing delay between having sent a request to the AtMega and receipt of a response from the ATMega
points to the ATMega slowing down.

If you are receiving the ATMega's temperature, displaying it in the log
would help prove or disprove the hypothesis that the ATMega heats up as it slows down.

ABG

박상현

unread,
Nov 12, 2019, 2:50:38 AM11/12/19
to mitappinv...@googlegroups.com
I don't have checking system of  Atmega's temperature.

How can I check temperature?

And do you have another ideas for testing?

Chris Ward

unread,
Nov 12, 2019, 8:41:46 AM11/12/19
to MIT App Inventor Forum
Hi 박상현

You would need to add a temperature sensor and either display the results on an LCD panel, send them to your serial monitor or send them to your App.

None of that is necessary now. Just blast the AtMega with cool air using a desktop fan or computer Case fan/CPU fan. A desktop fan will be adequate for now, just make sure it is close to the AT Mega. 

ABG

unread,
Nov 12, 2019, 8:46:19 AM11/12/19
to MIT App Inventor Forum
How can I check temperature?


For a software based approach, see https://forum.arduino.cc/index.php?topic=38043.0
That is beyond my skill, and dependent on the model and manufacture date of your chip.

They are fun and cheap, I used one on my kitchen refrigerator.

A sticky alternative would be to attach a small heat sink to the chip with thermal heat sink tape.
(only if you own the chip... it might not come off cleanly.) and see if that slows heating effects.

ABG
 

박상현

unread,
Nov 14, 2019, 3:31:14 AM11/14/19
to MIT App Inventor Forum
I also think the Atmega's temperature will be the real cause.

But I am creating very small type system, so I think I don't have space to add cooling system.

Then, I decide not to use before 30 seconds' data.

But I will try cooling test someday.

Thank you for your advice.

I will post another posting because there is still a problem with the graph I mentioned before.

I am sorry but I want you to help me again.

Reply all
Reply to author
Forward
0 new messages